<?php
/**
 * 调试打印
 * @return void
 */
function p()
{
    echo '<pre>';
    if (count(func_get_args())) {
        foreach (func_get_args() as $i) {
            var_export($i);
        }
    } else {
        echo '<br>';
    }
    echo '</pre>';
}

//中断抛出
function pp()
{
    $str = '';
    if (count(func_get_args())) {
        foreach (func_get_args() as $i) {
            $str .= arr2json($i);
        }
    } else {
        $str .= '';
    }
    throw new \Exception($str);
}

/**
 * 转成json串
 *
 * @param array $arr
 * @return string
 */
function arr2json($arr = array())
{
    if (is_array($arr)) {
        return json_encode($arr, JSON_UNESCAPED_UNICODE);
    } else if (is_object($arr)) {
        return json_encode((array)$arr, JSON_UNESCAPED_UNICODE);
    } else {
        return $arr;
    }
}

/**
 * 接口json返回格式化
 *
 * @param array $arr ['0','xxxx-msg', 'yyyy-url','zzzz-wait'] 格式
 * @return json-string
 * @author ljw 20170906
 */
function op($arr = array())
{
    return json(array(
        'code' => isset($arr[0]) ? $arr[0] : 0,
        'data' => empty($arr['data']) ? array() : $arr['data'],
        'msg' => empty($arr[1]) ? '' : $arr[1],
        'url' => empty($arr[2]) ? '' : $arr[2],
        'wait' => isset($arr[3]) ? $arr[3] : 0,
    ));
}

/**
 * 信息筛选
 * @param array $data 数据数组
 * @param array/string $rules 规则(所选字段)
 * @param bool $isList 是否列表,默认false - 非列表
 * @param bool $isWanna 正反选,默认true - 正,false - 反
 * @return array
 * @author ljw 20170406
 */
function filterData(array $data = array(), $rules = array(), $isList = false, $isWanna = true)
{
    if (is_string($rules)) {
        $rules = explode(',', $rules);
    }

    if ($isList) {
        if ($data && $rules) {
            foreach ($data as $key => $row) {
                foreach ($row as $k => $val) {
                    if (!in_array($k, $rules) == $isWanna) {
                        unset($data[$key][$k]);
                    }
                }
            }
        }
    } else {
        foreach ($data as $key => $val) {
            if (!in_array($key, $rules) == $isWanna) {
                unset($data[$key]);
            }
        }
    }
    return $data;
}



/**
 * 利用php自带函数计算
 * @param $start string 第一个参数
 * @param $end   string 第二个参数
 * @return array|string 时间数组|错误字符串
 */
function dateDiff($start, $end)
{
    $data = array('start' => $start, 'end' => $end);
    //判断是否为时间格式或时间戳,统一转为时间格式
    foreach ($data as &$v) {
        if (strtotime($v) || strtotime(date("Y-m-d H:i:s", (int)$v)) == $v) {
            if (!strtotime($v)) {
                $v = date("Y-m-d H:i:s", $v);
            }
        } else {
            return '时间格式有误';
        }
    }
    $datetime1 = new DateTime($data['start']);
    $datetime2 = new DateTime($data['end']);
    $interval = $datetime1->diff($datetime2);
    //相差总天数
    $data['day'] = $interval->format('%a');
    //相差小时
    $data['hour'] = $interval->format('%h');
    //相差分钟数
    $data['min'] = $interval->format('%i');
    //相差秒数
    $data['sec'] = $interval->format('%s');
    return $data;
}

/**
 * 字段是否都非空
 */
function fieldNotNull($data, $map)
{
    if (is_string($map)) {
        $map = explode(',', $map);
    }
    foreach ($data as $key => $vo) {
        foreach ($map as $v) {
            if ($key == $v) {
                if (empty($vo)) {
                    return false;
                }
            }
        }
    }
    return true;
}
/**
 * 一般字母转首字母大写
 * 思路:
 * step1.原字符串转小写,原字符串中的分隔符用空格替换,在字符串开头加上分隔符
 * step2.将字符串中每个单词的首字母转换为大写,再去空格,去字符串首部附加的分隔符.
 */
function camel($string)
{
    return strtoupper(substr($string, 0, 1)). substr($string, 1, strlen($string) - 1);
}
/**
 * 下划线转小驼峰
 * 思路:
 * step1.原字符串转小写,原字符串中的分隔符用空格替换,在字符串开头加上分隔符
 * step2.将字符串中每个单词的首字母转换为大写,再去空格,去字符串首部附加的分隔符.
 */
function camelize($uncamelized_words, $separator = '_')
{
    $uncamelized_words = $separator . str_replace($separator, " ", strtolower($uncamelized_words));
    return ltrim(str_replace(" ", "", ucwords($uncamelized_words)), $separator);
}

/**
 * 驼峰命名转下划线命名
 * 思路:
 * 小写和大写紧挨一起的地方,加上分隔符,然后全部转小写
 */
function uncamelize($camelCaps, $separator = '_')
{
    return strtolower(preg_replace('/([a-z])([A-Z])/', "$1" . $separator . "$2", $camelCaps));
}
